package Z_directExchange;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import utils.RabbitMQUtils;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author： pang-yun
 * @date： 2021-12-15 19:35
 * 功能目的 ：用于   direct 消费接口
 */

public class DirectConsumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        Channel channel = RabbitMQUtils.getChannel();
        // 声明交换机
        channel.exchangeDeclare(Const.EXCHANGE_NAME, BuiltinExchangeType.DIRECT);
        // 声明队列
        channel.queueDeclare(Const.QUEUE_NAME_FIRST,false,false,false,null);
        // 绑定  可以多重绑定
        channel.queueBind(Const.QUEUE_NAME_FIRST,Const.EXCHANGE_NAME,Const.ROUTE_KEY);
        channel.queueBind(Const.QUEUE_NAME_FIRST,Const.EXCHANGE_NAME,Const.ROUTE_KEY_A);

        //------------------------------------------
        // 接收消息 的回调接口
        DeliverCallback deliverCallback =((consumerTag, message) -> {
            System.out.println("打印接收到的信息 : "+ new String(message.getBody()));
        });
        // 消费者取消接收消息的 回调接口
        CancelCallback cancelCallback = (consumerTag -> {
            System.out.println("接收消息失败！");
        });
        // 消费消息
        channel.basicConsume(Const.QUEUE_NAME_FIRST,deliverCallback,cancelCallback);
    }
}
